<?php

class SuporteController extends AppController {    

    public $scaffold;

    public function index(){
        $this->redirect(array('action' => 'pesquisar'));
    }

    public function pesquisar(){
        try{
            if($this->request->is('post')){
                if(!self::validaPesquisa($this->request->data)){
                    return false;
                }

                $i = 0;
                $parametros = array();
                if (!empty($this->request->data['SUPORTE']['TKT'])) {
                    $coos = explode(".", str_replace("-", ".", $this->request->data['SUPORTE']['TKT']));
                    $parametros['conditions'][$i++] = array('Suporte.CO_OS ' => $coos[0]);
                }
                if (!empty($this->request->data['SUPORTE']['TITULO'])) {
                    $parametros['conditions'][$i++] = array('Suporte.DS_TITULO_OS LIKE ' => '%'.$this->request->data['SUPORTE']['TITULO'].'%');
                }
                if (!empty($this->request->data['SUPORTE']['DATA'])) {
                    $parametros['conditions'][$i++] = array('Suporte.DT_ABERTURA  >= ' => $this->request->data['SUPORTE']['DATA'].' '.$this->request->data['SUPORTE']['HORA'] );
                    $parametros['conditions'][$i++] = array('Suporte.DT_ABERTURA  <= ' => $this->request->data['SUPORTE']['DATA'].' 23:59:59' );
                }                
                if (!empty($this->request->data['SUPORTE']['USUARIO'])) {
                    $parametros['conditions'][$i++] = array('Suporte.CD_LOGIN' => $this->request->data['SUPORTE']['USUARIO']);
                }
                if (!empty($this->request->data['SUPORTE']['UNIDADE'])) {
                    $parametros['conditions'][$i++] = array('Suporte.CD_INST_LAB' => $this->request->data['SUPORTE']['UNIDADE']);
                }
                if (!empty($this->request->data['SUPORTE']['STATUS'])) {
                    $parametros['conditions'][$i++] = array('Suporte.ST_OS' => $this->request->data['SUPORTE']['STATUS']);
                }

                $arrSuporte = $this->Suporte->find('all', array(
                                                            'joins' => array(
                                                                            array(
                                                                                'table' => 'AUTORIZADO',
                                                                                'alias' => 'Usuario',
                                                                                'type' => 'INNER',
                                                                                'conditions' => array(
                                                                                    'Suporte.CD_LOGIN = Usuario.CD_LOGIN',
                                                                                    )
                                                                                ),
                                                                                array(
                                                                                'table' => 'TB_PERFIL',
                                                                                'alias' => 'Perfil',
                                                                                'type' => 'INNER',
                                                                                'conditions' => array(
                                                                                    'Suporte.CO_PERFIL = Perfil.CO_PERFIL',
                                                                                    )
                                                                                ),
                                                                                array(
                                                                                'table' => 'INSTITUICAO_LAB',
                                                                                'alias' => 'InstituicaoLab',
                                                                                'type' => 'INNER',
                                                                                'conditions' => array(
                                                                                    'Suporte.CD_INST_LAB = InstituicaoLab.CD_INST_LAB'
                                                                                    )
                                                                                ),
                                                                                array(
                                                                                'table' => 'TB_INTERACAO',
                                                                                'alias' => 'Interacao',
                                                                                'type' => 'LEFT',
                                                                                'conditions' => array(
                                                                                    'Suporte.CO_OS = Interacao.CO_OS',
                                                                                    'Interacao.CO_INTERACAO = (select MAX(CO_INTERACAO) from TB_INTERACAO I WHERE I.CO_OS = Suporte.CO_OS)'
                                                                                    )
                                                                                )
                                                                          ),
                                                                'conditions' => $parametros['conditions'],
                                                                'fields' => array("'OS'+RIGHT('0000'+convert(varchar(4), Suporte.CO_OS), 4)+'.'+RIGHT('00000'+convert(varchar, InstituicaoLab.CD_INST_LAB), 5)+'-'+DATENAME(YY ,Suporte.DT_ABERTURA) as NR_OS",
                                                                                    "Suporte.DT_ABERTURA","Interacao.DT_INTERACAO","Suporte.DS_TITULO_OS","Usuario.NM_AUT","Suporte.CO_OS",
                                                                                    "Perfil.NO_PERFIL","InstituicaoLab.NM_INST_CURTO","InstituicaoLab.CD_INST_LAB","Suporte.ST_OS"),
                                                                'order' => $this->request->data['SUPORTE']['ORDENAR']
                                                            ));

                $this->set('arrSuporte', $arrSuporte);

            }else{
                
            }
        }catch (Exception $e){
            $this->Session->setFlash(__('Ocorreu um erro durante a pesquisa'));
        }
    }

    public function cadastrar(){
        try{                        
            if($this->request->is('post')){
                $dataSource = $this->Suporte->getDataSource();
                $dataSource->begin();

                if(strlen($this->request->data['Suporte']['DS_TITULO_OS']) < 4){
                    $this->Session->setFlash(__('O título da OS deve ter no mínino 4 caracteres'));
                    return false;
                }

                $id = $this->Suporte->nextval('CO_OS');
                $this->request->data['Suporte']['CO_OS']            = $id;
                $this->request->data['Suporte']['ST_OS']            = 'A';
                $this->request->data['Suporte']['DT_ABERTURA']      = date('Y-m-d H:i:s');//date('d/m/Y H:i:s');
                $this->request->data['Suporte']['DT_FECHAMENTO']    = date('Y-m-d H:i:s');//date('d/m/Y H:i:s');
                $this->request->data['Suporte']['CD_LOGIN']         = $_SESSION['usuario']['Usuario']['CD_LOGIN'];
                $this->request->data['Suporte']['CD_INST_LAB']      = $_SESSION['usuario']['RelacionamentoAutoPerfilInst'][0]['CD_INST_LAB'];
                $this->request->data['Suporte']['CO_PERFIL']        = $_SESSION['usuario']['RelacionamentoAutoPerfilInst'][0]['CO_PERFIL'];
                if(!$this->Suporte->save($this->request->data['Suporte'], false)){
                    throw new Exception();
                }
                $dataSource->commit();

                $this->Session->setFlash(__('OS salva com sucesso.'));
                $this->redirect(array('action' => 'registrar/'.$id));
            }else{
                $this->loadModel("Perfil");
                $arraPerfil = $this->Perfil->getCombo(array('CO_PERFIL','NO_PERFIL'));
                $this->set('arraPerfil', $arraPerfil);
            }
        }catch(Exception $e){
            $dataSource->rollback();
            print $e;exit;
            $this->Session->setFlash(__('Ocorreu um erro ao salvar a OS.'));
        }
    }

    public function registrar($id){
        try{
            $this->loadModel('Interacao');
            
            if($this->request->is('post') || $this->request->is('put')){

                $dataSource = $this->Interacao->getDataSource();
                $dataSource->begin();

                $this->request->data['Interacao']['DT_INTERACAO']   = date('Y-m-d H:i:s');//date('d/m/Y H:i:s');
                $this->request->data['Interacao']['CD_LOGIN']       = $_SESSION['usuario']['Usuario']['CD_LOGIN'];
                if(!$this->Interacao->save($this->request->data['Interacao'])){                    
                    throw new Exception;
                }
                
                if(!empty ($this->request->form['arquivos']['name'][0])){
                    $this->loadModel('Anexos');
                    $coInteracao = $this->Interacao->getLastInsertID();
                    foreach ($this->request->form['arquivos']['name'] as $k => $v) {
                        $coOs = $this->request->data['Interacao']['CO_OS'];

                        $ext = explode(".", $this->request->form['arquivos']['name'][$k]);
                        $novoName = "ANX_".$coOs."_".$coInteracao."_".sprintf("%02s",$k+1).".".$ext[count($ext)-1];

                        $arrAnexo = array();
                        $arrAnexo['CO_INTERACAO']   = $coInteracao;
                        $arrAnexo['CO_OS']          = $coOs;
                        $arrAnexo['DS_PATH']        = "/app/webroot/files/suporte/anexos/".$coOs;
                        $arrAnexo['NO_ARQUIVO']     = $novoName;
                        if(!$this->Anexos->save($arrAnexo)){
                            throw new Exception("Erro ao registrar o anexo");
                        }

                        $arrAnexo = array();                        
                        $arrAnexo['name']       = $novoName;
                        $arrAnexo['type']       = $this->request->form['arquivos']['type'][$k];
                        $arrAnexo['tmp_name']   = $this->request->form['arquivos']['tmp_name'][$k];
                        $arrAnexo['error']      = $this->request->form['arquivos']['error'][$k];
                        $arrAnexo['size']       = $this->request->form['arquivos']['size'][$k];
                        if(!self::uploadArquivo($arrAnexo, $coOs)){
                            throw new Exception("Erro ao fazer upload do anexo");
                        }
                    }                    
                }

                $dataSource->commit();

                $this->Session->setFlash('Diálogo registrado');
                $this->redirect(array('action' => 'registrar/'.$id));
            }else{
                $arrOS = $this->Suporte->find('all', array(
                                        'joins' => array(
                                                        array(
                                                            'table' => 'AUTORIZADO',
                                                            'alias' => 'Usuario',
                                                            'type' => 'INNER',
                                                            'conditions' => array(
                                                                'Suporte.CD_LOGIN = Usuario.CD_LOGIN',
                                                                )
                                                            ),
                                                            array(
                                                            'table' => 'TB_PERFIL',
                                                            'alias' => 'Perfil',
                                                            'type' => 'INNER',
                                                            'conditions' => array(
                                                                'Suporte.CO_PERFIL = Perfil.CO_PERFIL',
                                                                )
                                                            ),
                                                            array(
                                                            'table' => 'INSTITUICAO_LAB',
                                                            'alias' => 'InstituicaoLab',
                                                            'type' => 'INNER',
                                                            'conditions' => array(
                                                                'Suporte.CD_INST_LAB = InstituicaoLab.CD_INST_LAB',
                                                                )
                                                            )
                                                        ),
                                        'fields' => array("'OS'+RIGHT('0000'+convert(varchar, Suporte.CO_OS), 4)+'.'+RIGHT('00000'+convert(varchar, InstituicaoLab.CD_INST_LAB), 5)+'-'+DATENAME(YY ,Suporte.DT_ABERTURA) as NR_OS",
                                                            "Usuario.NM_AUT","Suporte.CO_OS","Suporte.DT_ABERTURA","Suporte.DS_TITULO_OS","Suporte.ST_OS",
                                                            "Perfil.NO_PERFIL","InstituicaoLab.NM_INST_CURTO","InstituicaoLab.CD_INST_LAB"),
                                        'conditions' => array("Suporte.ST_OS" => "A", "Suporte.CO_OS = " => $id)
                                        )
                            );
                $this->set('arrOS', $arrOS);

                $arrDialog = $this->Interacao->find('all',array('joins' => array(
                                                                                array(
                                                                                    'table' => 'AUTORIZADO',
                                                                                    'alias' => 'Usuario',
                                                                                    'type' => 'INNER',
                                                                                    'conditions' => array(
                                                                                        'Interacao.CD_LOGIN = Usuario.CD_LOGIN',
                                                                                        )
                                                                                    )
                                                                                ),
                                                                'fields' => array("Interacao.TX_INTERACAO","Interacao.DT_INTERACAO","Usuario.NM_AUT","Interacao.CO_OS","Interacao.CO_INTERACAO",
                                                                                    "(SELECT count(*)
                                                                                        FROM TB_ANEXOS A
                                                                                        WHERE A.CO_OS = Interacao.CO_OS
                                                                                            AND A.CO_INTERACAO = Interacao.CO_INTERACAO) as TOTAL_ANEXOS"),
                                                                'conditions' => array("Interacao.CO_OS = " => $id)
                                                                ,'order' => array("Interacao.CO_INTERACAO desc ")
                                                            )
                                                    );

                $this->set('arrDialog', $arrDialog);
            }

            $this->set('id', $id);
        }catch(Exception $e){
            $dataSource->rollback();
            $this->Session->setFlash(__('Ocorreu um erro ao registrar diálogo.'));
            $this->redirect(array('action' => 'registrar/'.$id));
        }
    }

    public function delete($id){
        try{
            $dataSource = $this->Suporte->getDataSource();
            $dataSource->begin();
            $retorno['RETORNO'] = 'false';

            $arrOS = array();
            $arrOS['CO_OS'] = $id;
            $arrOS['ST_OS'] = 'I';
            if ($this->Suporte->save($arrOS, false)) {
                $this->Session->setFlash(__('OS excluída com sucesso'));
                $retorno['RETORNO'] = 'true';
                $dataSource->commit();
            }
        }catch (Exception $e){
            $dataSource->rollback();
            $this->Session->setFlash(__('Ocorreu um erro ao excluir a OS'));
            $retorno['RETORNO'] = 'false';
        }
        print json_encode($retorno);exit;
    }

    public function fecharos($id){
        try{
            $this->layout = false;
            $dataSource = $this->Suporte->getDataSource();
            $dataSource->begin();
            
            $arrOS = array();
            $arrOS['CO_OS'] = $id;
            $arrOS['ST_OS'] = 'F';
            if ($this->Suporte->save($arrOS, false)) {
                $this->Session->setFlash(__('OS fechada com sucesso'));
                $dataSource->commit();
            }            
        }catch(Exception $e){
            $this->Session->setFlash(__('Ocorreu um erro ao fechar a OS'));
            $dataSource->rollback();
        }
        $this->redirect(array('action' => 'index'));
    }

    public function exibianexos($id){
        try{
            $this->layout = false;
            $this->loadModel('Anexos');
            $arrAnexos = $this->Anexos->find('all',array('conditions' => array("Anexos.CO_INTERACAO = " => $id)));
            $this->set('arrAnexos',$arrAnexos);
        }catch(Exception $e){
            print $e;
        }
    }

    public function downloadFile($id){
        try{
            $this->layout = false;
            $this->loadModel('Anexos');
            $arrAnexo = $this->Anexos->find('first',array('conditions' => array("Anexos.CO_ANEXOS = " => $id)));

            $arquivo = $arrAnexo['Anexos']['NO_ARQUIVO'];
            switch(strtolower(substr(strrchr(basename($arquivo),"."),1))){ // verifica a extensão do arquivo para pegar o tipo
                 case "pdf": $tipo="application/pdf"; break;
                 case "exe": $tipo="application/octet-stream"; break;
                 case "zip": $tipo="application/zip"; break;
                 case "doc": $tipo="application/msword"; break;
                 case "xls": $tipo="application/vnd.ms-excel"; break;
                 case "ppt": $tipo="application/vnd.ms-powerpoint"; break;
                 case "gif": $tipo="image/gif"; break;
                 case "png": $tipo="image/png"; break;
                 case "jpg": $tipo="image/jpg"; break;
                 case "mp3": $tipo="audio/mpeg"; break;
                 case "php": // deixar vazio por seurança
                 case "htm": // deixar vazio por seurança
                 case "html": // deixar vazio por seurança
            }

            header("Content-Type: ".$tipo); // informa o tipo do arquivo ao navegador
            header("Content-Length: ".filesize($arquivo)); // informa o tamanho do arquivo ao navegador
            header("Content-Disposition: attachment; filename=".basename($arquivo)); // informa ao navegador que é tipo anexo e faz abrir a janela de download, tambem informa o nome do arquivo
            readfile($arquivo); // lê o arquivo
            exit; // aborta pós-ações
        }catch (Exception $e){
            print $e;
        }
    }

    public function validaPesquisa($dados){
        $msg = 'Informe um parametro para a pesquisa.';
        if(!empty($dados['SUPORTE']['TKT'])){
            return true;

        }else if(!empty($dados['SUPORTE']['TITULO'])){
            return true;

        }else if(!empty($dados['SUPORTE']['DATA']) && !empty($dados['SUPORTE']['HORA'])){
            return true;

        }else if(!empty($dados['SUPORTE']['USUARIO'])){
            return true;

        }else if(!empty($dados['SUPORTE']['UNIDADE'])){
            return true;

        }else {
            $this->Session->setFlash(__($msg));
            return false;
        }

        return true;
    }

    public function uploadArquivo($files, $dir) {
        try {
            $caminho = $_SERVER['DOCUMENT_ROOT'].'/siscel/app/webroot/files/suporte/anexos/'.$dir;

            if (file_exists($caminho)) {
                chmod($caminho, 0777);
            } else {
                mkdir($caminho, 0777, true);
            }

            //remove espaço do nome
            //$file_name = preg_replace("/^a-zA-Z0-9_./", "_", strtr($files['name'][$k], "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC_"));
            $file_name = $files['name'];
            //$file_type = $files['type'];
            $file_size = $files['size'];
            $file_tmp_name = $files['tmp_name'];
            $error = $files['error'];

            if($file_size > 2097152){
                $error = 2;
            }

            if(strlen($file_name)>100){
                    $error=5;
            }

            $msg = '';
            switch ($error) {
                case 0:
                    break;
                case 1:
                    $msg .= ' O tamanho do arquivo '.$files['name'].' é maior que o definido nas configurações do PHP!';
                    break;
                case 2:
                    $msg .= ' O tamanho do arquivo '.$files['name'].' é maior do que o permitido!';
                    break;
                case 3:
                    $msg .= ' O upload do arquivo '.$files['name'].' não foi concluído!';
                    break;
                case 4:
                    $msg .= ' O upload do arquivo '.$files['name'].' não foi feito!';
                    break;
                case 5:
                    $msg .= ' O nome do arquivo '.$files['name'].' contém mais de 100 caracteres!';
                    break;
            }

            if ($error == 0) {
                if (!is_uploaded_file($file_tmp_name)) {
                    $msg .= ' Erro ao processar arquivo '.$files['name'].'!';
                } else {
                    if (!move_uploaded_file($file_tmp_name, $caminho."/".$file_name)) {
                        $msg .= ' Não foi possível salvar o arquivo '.$files['name'].'!';
                    } else {
                        return true;
                    }
                }
            }

            //return $msg;
            return false;

        } catch (Exception $e) {
            return false;
        }
    }

}
?>